; GDT ir IDT lentelių užkrovimas

[GLOBAL gdt_flush]  ; Dabar funkcija galime kviesti iš C kodo
[GLOBAL idt_flush]  ; Dabar funkcija galime kviesti iš C kodo

gdt_flush:
  mov eax, [esp+4]  ; Parametras perduotas funkcijai yra išsaugotas steke. Per esp registras ištraukiame pointerį į GDT lentelės pradžią
  lgdt [eax]        ; Užkrauname GDT lentelę

  mov ax, 0x10      ; 0x10, nes GDT kernel duomenų segmentas yra 3, o vienos GDT įeities dydis 8 baitai.
  mov ds, ax        ; Užkrauname visu duomenų segmentų selectorius.
  mov es, ax
  mov fs, ax
  mov gs, ax
  mov ss, ax
  jmp 0x08:.flush   ; 0x08 yra ofsetas CS registrui. Kad jį įrašyti reikia pdaryti didelį šuolį.
.flush:
  ret               ; Grįžtame iš kur atėjome

idt_flush:
  mov eax, [esp+4]  ; Parametras perduotas funkcijai yra išsaugotas steke. Per esp registras ištraukiame pointerį į IDT lentelės pradžią
  lidt [eax]        ; Užkrauname IDT lentelę
  ret               ; Grįžtame iš kur atėjome
